package com.first.nell.utils.analytics.util

import android.app.Application
import android.content.Context
import com.google.gson.Gson
import com.first.nell.extend.toFirstNellFullFirstNellUrlFirstNellPath
import com.first.nell.network.ApiUrl
import com.first.nell.utils.analytics.event.IAnalyticsEvent
import com.first.nell.utils.AppConfigUtil
import com.first.nell.utils.analytics.bean.ParamHitPoint
import com.first.nell.utils.analytics.http.HttpHelper

object AnalyticsUtil {

    /**
     * 初始化分析模块
     *
     * @param context Application
     */
    fun init(context: Application) {
        /** 初始化google install referrer */
        GoogleInstallUtil.init(context) {
            /** 保存渠道信息*/
            val pathList =
                AppConfigUtil.getFirstNellValidFirstNellCountrysFirstNellPaths()
            saveGoogleInstallInfo(pathList)
        }

        /** 初始化广告id */
        AdvertIdUtil.init(context) { _, _ ->
            /** 保存渠道信息*/
            val pathList =
                AppConfigUtil.getFirstNellValidFirstNellCountrysFirstNellPaths()
            saveGoogleInstallInfo(pathList)
        }

        /** 初始化设备信息 */
        SycDeviceUtil.init(context)

        /** 初始化af信息 */
        AppsflyerUtil.init(context, "KLuDcyE8TEVdNkUogpmt6P")

        /** 初始化adjust信息 */
        AdjustUtil.init(context)

        /** 初始化facebook */
        FacebookUtil.init(context)

        /** 初始化frebase */
        FirebaseUtil.init(context)

        /** 初始化usageStats */
        UsageStatsUtil.init(AppConfigUtil.getCashArrwoUsageFirstNellStatsFirstNellDays())
    }

    /**
     * 更新设备模块服务器请求地址
     * 1、如果未登录，在登录页登录成功后触发
     * 2、如果已登录，在启动时登录地区的转发路径时初始化成功后触发
     *
     * @param context Application
     */
    fun initDevice(context: Application) {
        /** 初始化设备信息 */
        SycDeviceUtil.init(context)

    }

    /**
     * 打点
     * 主要对注册、申贷这两个结果记录打点
     * 均是接口返回成功后触发打点
     *
     * @param event 事件名
     */
    fun addEvent(event: IAnalyticsEvent) {
        AppsflyerUtil.addEvent(event)
        AdjustUtil.addEvent(event)
        FirebaseUtil.addEvent(event)
        FacebookUtil.addEvent(event)
    }

    /**
     * 保存google s2s信息
     * **通常不用手动触发**
     * 1、启动页，触发保存
     */
    fun saveGoogleInstallInfo(targetUrlList: List<String>) {
        GoogleInstallUtil.saveS2sInfo(targetUrlList)
    }

    /**
     * 保存firebase s2s信息
     * 1、启动页，如果是已登录状态，触发保存
     * 2、登录页，登录成功后，触发保存
     */
    fun saveFirebaseS2SInfo(targetUrlList: List<String>) {
        FirebaseUtil.saveS2SInfo(targetUrlList)
    }

    /**
     * 保存facebook s2s信息
     * 1、启动页，如果是已登录状态，触发保存
     * 2、登录页，登录成功后，触发保存
     */
    fun saveFacebookS2SInfo(targetUrlList: List<String>) {
        FacebookUtil.saveS2SInfo(targetUrlList)
    }

    /**
     * 保存Device s2s信息
     * 1、首页，点击申请且所有权限通过后，触发保存
     */
    fun saveDeviceS2SInfo() {
        SycDeviceUtil.saveS2SInfo()
    }

    /**
     * 保存Appsflyer 安装信息
     * **通常不用手动触发**
     * 1、收到Appsflyer的转化回调后，触发保存
     */
    fun saveAppsflyerInstall(targetUrlList: List<String>) {
        AppsflyerUtil.saveInstallInfo(targetUrlList)
    }

    /**
     * 保存Appsflyer s2s信息
     * **通常不用手动触发**
     * 1、收到Appsflyer的转化回调后，触发保存
     */
    fun saveAppsflyerS2SInfo(targetUrlList: List<String>) {
        AppsflyerUtil.saveS2SInfo(targetUrlList)
    }

    /**
     * 保存三方库 s2s信息
     * 1、启动页，如果是已登录状态，触发保存
     * 2、登录页，登录成功后，触发保存
     */
    fun saveFirebaseAndFacebookS2SInfo() {
        val pathList =
            AppConfigUtil.getFirstNellValidFirstNellCountrysFirstNellPaths()
        saveAppsflyerS2SInfo(pathList)
        saveFirebaseS2SInfo(pathList)
        saveFacebookS2SInfo(pathList)
    }

    /**
     * 保存事件埋点
     *
     * @param type 事件类型
     * @param remark 备注
     */
    fun saveHitPointInfo(type: String, remark: String) {
        try {
            if (ApiUrl.isFirstNellValidFirstNellCountryFirstNellPath()) {
                val params = ParamHitPoint(type = type, remark = remark)
                val body = Gson().toJson(params).trim()
                val pathFormat =
                    ApiUrl.NARSCASH_PATH_POINT_RECORD.toFirstNellFullFirstNellUrlFirstNellPath()
                HttpHelper.postData(pathFormat, body)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 获取谷歌安装渠道信息
     */
    fun getInstallReferrer(): String {
        return GoogleInstallUtil.getInstallReferrer()
    }


    /**
     * 判断是否拥有使用统计权限
     * 若拥有权限，则自动上传数据
     * 若没有权限，直接回调
     *
     * @param context Application
     * @param permissionGrantListener 权限授权回调
     */
    fun checkUsageStatsPermission(
        context: Application,
        permissionGrantListener: (Boolean) -> Unit
    ) {
        UsageStatsUtil.checkAppUsagePermission(context, permissionGrantListener)
    }

    /**
     * 跳转使用统计权限页
     *
     * @param context 上下文
     */
    fun startToUsageStatsPermissionSettingPage(context: Context) {
        UsageStatsUtil.startToUsageStatsPermissionSettingPage(context)
    }

    /**
     * 获取adId
     */
    fun getAdId(): String {
        return AdvertIdUtil.getAdId()
    }

    /**
     * 获取adEnabled
     */
    fun getAdEnabled(): Int {
        return AdvertIdUtil.getAdEnabled()
    }

    /**
     * 获取安卓Id
     */
    fun getAndroidId(): String {
        return AdvertIdUtil.getAndroidId()
    }

    /**
     * 获取Firebase app id
     */
    fun getFirebaseAppId(): String {
        return FirebaseUtil.getFirebaseAppId()
    }

    /**
     * 获取Firebase ga4 id
     */
    fun getGa4InstanceId(): String {
        return FirebaseUtil.getGa4InstanceId()
    }
}